package _Banque._TI;

import java.util.*;

import _Banque.*;
import _Tests.Tests;

public class TI_Banque_N2 {

	public static void main(String[] args) throws Exception
	{
		Tests.Begin("Integration du package _Banque", "1.0.0");
		
		Tests.Design("Controle de deux titulaires " +
				"dans deux banques differentes", 3);
		{
			// --- creation de de la banque
			Banque bnp = new Banque("BNP", "16654", "31 avenue de la Republique, PARIS", "59871563457824");
			Banque ca = new Banque("Credit Agricole", "16421", "Marseille", "59986253457824");
			
			// --- creation des deux regions
			bnp.creerRegion("PACA");
			ca.creerRegion("Ile de France");
			
			// --- creation de deux agences
			bnp.ouvrirAgence("PACA", "55 avenue Jean Medecin, NICE");
			ca.ouvrirAgence("Ile de France", "14 rue de bob l'eponge, PARIS");
			
			// --- recuperation des agences
			AgenceBancaire bnpPaca = bnp.getAgence(1001);
			AgenceBancaire caParis = ca.getAgence(1001);
			
			// --- creation de deux titulaires
			Titulaire bob = new Titulaire("Bob", "Eponge", "1999/05/01", "Bikini Bottom");
			Titulaire patrick = new Titulaire("Patrick", "EtoileDeMer", "1980/15/21", "Coco");
			
			// --- ouverture d'un compte courant pour bob
			bnpPaca.ouvrirCompte(bob);
			
			// --- ouverture d'un compte epargne pour patrick
			caParis.ouvrirCompte(patrick, 1.6f);
			
			// --- recuperation du compte courant de bob
			HashMap<Long, CompteBancaire> comptesBob = bnpPaca.getCompteBancaire(bob, 'C');
			CompteCourant compteBob = (CompteCourant) comptesBob.get((long)8000001);
			
			// --- recuperation du compte epargne de patrick
			HashMap<Long, CompteBancaire> comptesPatrick = caParis.getCompteBancaire(patrick, 'E');
			CompteEpargne comptePatrick = (CompteEpargne) comptesPatrick.get((long)4000001);
			
			// --- versement sur les comptes
			compteBob.executer("versement initial", 'V', 500);
			comptePatrick.executer("versement initial", 'V', 100);
			
			Tests.Case("Cas d'echanges entre les comptes");
			{
				compteBob.executer("Versement sur le compte de Patrick", 'R', 50);
				comptePatrick.executer("Versement de la part de Bob", 'V', 50);
				
				Tests.Unit(2, bnp.nombreOperations(_Banque.dateCourante()));
				Tests.Unit(450, bnp.totalDepots());
				Tests.Unit(150, ca.totalDepots());
				Tests.Unit(2, ca.nombreOperations(_Banque.dateCourante()));
			}
			
	
			
		}

		
		Tests.End();
	}

}
